<?php
/**
 * Абстрактный класс для классов Sql который будет содержать спецефические 
 * функции для базы данных Mysql, остальные абстрактные классы для других
 * баз должны наследовать данный класс.
 * 
 * @author nrnwest@gmail.com
 *
 */
abstract  class Arm_Db_Sql_Mysql extends Arm_Db_Sql_Abstract
{
            
 /**
     * Мулти вставка в одну таблицу.
     *
     * @param string $table имя таблицы
     * @param array $colums массив столбцов
     * @param array $data массив массивов, каждый вложенный масив это 1 ряд,
     *                    ключи данных в ряде должны совдатать с значениями в $colums
     * @param Zend_Db_Adapter_Abstract $db
     * @param bool $ignore вставка с IGNORE или нет.
     * @param bool $returnSql если установить true будет возвращен sql запрос, без выполнения.
     * @return Zend_Db_Statement_Interface
     */
    protected  function _insertMulti($table, array $colums, array $data,
    Zend_Db_Adapter_Abstract $db = null, $ignore = true, $returnSql = false)
    {
        if($db === null) {
            $db = Arm_Db::getAdapter();
        }
        
        $type = $ignore === true ? 'IGNORE' : 'INTO';
        $columnStr = '(';
        $columsInden = array();
        foreach ($colums as $k => $v) {
            $columsInden[$k] = $db->quoteIdentifier($v);
        }
        $columnStr .= implode(',', $columsInden) . ')';
        $sql = 'INSERT  ' . $type . ' ' . $this->getDb()->quoteIdentifier($table) . $columnStr . ' VALUES ';
        $values = array();
        
        foreach ($data as $keyRows => $valueRows) {
            if(! is_array($valueRows)) {
                throw new Arm_Db_Exception('Error not Array:' . print_r($valueRows, true));
            }
            $valueRowsIns = array();
            foreach ($colums as $col) {
                if(false === array_key_exists($col, $valueRows)) {
                    $messgeError = 'Не обнаружен ключ столбца: ' . $col .' в передаваемом, массиве.
                    ключ в массиве для вставки:' . $keyRows . 'данные: ' . print_r($data[$keyRows], true);
                    throw new Arm_Db_Exception($messgeError);
                    
                }
                $valueRowsIns[] = $db->quote($valueRows[$col]);
            }
            
            $values[] = '(' . implode(',', $valueRowsIns) . ')';
        }
        
        $sql .= implode(',', $values) . ';';
        
        if($returnSql) {
            return $sql;
        }
        
        return $db->query($sql);
    }
}